home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume24 / gnucalc / part33 < prev    next >
Encoding:
Text File  |  1991-10-31  |  55.5 KB  |  1,643 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i081:  gnucalc - GNU Emacs Calculator, v2.00, Part33/56
  4. Message-ID: <1991Oct31.214457.2376@sparky.imd.sterling.com>
  5. X-Md4-Signature: 05542d57c8e0883ddc40c41b97f7c944
  6. Date: Thu, 31 Oct 1991 21:44:57 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 81
  11. Archive-name: gnucalc/part33
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. ---- Cut Here and unpack ----
  16. #!/bin/sh
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file calc.texinfo continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 33; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping calc.texinfo'
  34. else
  35. echo 'x - continuing file calc.texinfo'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'calc.texinfo' &&
  37. vector.
  38. X
  39. (@bullet{}) @strong{Exercise 1.}  Use @samp{*} to sum along the rows
  40. of the above @c{$2\times3$}
  41. @asis{2x3} matrix to get @cite{[6, 15]}.  Now use @samp{*} to
  42. sum along the columns to get @cite{[5, 7, 9]}.
  43. @xref{Matrix Answer 1, 1}. (@bullet{})
  44. X
  45. @cindex Identity matrix
  46. An @dfn{identity matrix} is a square matrix with ones along the
  47. diagonal and zeros elsewhere.  It has the property that multiplication
  48. by an identity matrix, on the left or on the right, always produces
  49. the original matrix.
  50. X
  51. @group
  52. @smallexample
  53. 1:  [ [ 1, 2, 3 ]      2:  [ [ 1, 2, 3 ]      1:  [ [ 1, 2, 3 ]
  54. X      [ 4, 5, 6 ] ]          [ 4, 5, 6 ] ]          [ 4, 5, 6 ] ]
  55. X    .                  1:  [ [ 1, 0, 0 ]          .
  56. X                             [ 0, 1, 0 ]
  57. X                             [ 0, 0, 1 ] ]
  58. X                           .
  59. X
  60. X    r 4                    v i 3 RET              *
  61. @end smallexample
  62. @end group
  63. X
  64. If a matrix is square, it is often possible to find its @dfn{inverse},
  65. that is, a matrix which, when multiplied by the original matrix, yields
  66. an identity matrix.  The @kbd{&} (reciprocal) key also computes the
  67. inverse of a matrix.
  68. X
  69. @group
  70. @smallexample
  71. 1:  [ [ 1, 2, 3 ]      1:  [ [   -2.4,     1.2,   -0.2 ]
  72. X      [ 4, 5, 6 ]            [    2.8,    -1.4,    0.4 ]
  73. X      [ 7, 6, 0 ] ]          [ -0.73333, 0.53333, -0.2 ] ]
  74. X    .                      .
  75. X
  76. X    r 4 r 2 |  s 5         &
  77. @end smallexample
  78. @end group
  79. X
  80. @noindent
  81. The vertical bar @kbd{|} @dfn{concatenates} numbers, vectors, and
  82. matrices together.  Here we have used it to add a new row onto
  83. our matrix to make it square.
  84. X
  85. We can multiply these two matrices in either order to get an identity.
  86. X
  87. @group
  88. @smallexample
  89. 1:  [ [ 1., 0., 0. ]      1:  [ [ 1., 0., 0. ]
  90. X      [ 0., 1., 0. ]            [ 0., 1., 0. ]
  91. X      [ 0., 0., 1. ] ]          [ 0., 0., 1. ] ]
  92. X    .                         .
  93. X
  94. X    M-RET  *                  U TAB *
  95. @end smallexample
  96. @end group
  97. X
  98. @cindex Systems of linear equations
  99. @cindex Linear equations, systems of
  100. Matrix inverses are related to systems of linear equations in algebra.
  101. Suppose we had the following set of equations:
  102. X
  103. @ifinfo
  104. @group
  105. @example
  106. X    a + 2b + 3c = 6
  107. X   4a + 5b + 6c = 2
  108. X   7a + 6b      = 3
  109. @end example
  110. @end group
  111. @end ifinfo
  112. @tex
  113. \turnoffactive
  114. $$ \openup1\jot \tabskip=0pt plus1fil
  115. \halign to\displaywidth{\tabskip=0pt
  116. X   $\hfil#$&$\hfil{}#{}$&
  117. X   $\hfil#$&$\hfil{}#{}$&
  118. X   $\hfil#$&${}#\hfil$\tabskip=0pt plus1fil\cr
  119. X  a&+&2b&+&3c&=6 \cr
  120. X 4a&+&5b&+&6c&=2 \cr
  121. X 7a&+&6b& &  &=3 \cr}
  122. $$
  123. @end tex
  124. X
  125. @noindent
  126. This can be cast into the matrix equation,
  127. X
  128. @ifinfo
  129. @group
  130. @example
  131. X   [ [ 1, 2, 3 ]     [ [ a ]     [ [ 6 ]
  132. X     [ 4, 5, 6 ]   *   [ b ]   =   [ 2 ]
  133. X     [ 7, 6, 0 ] ]     [ c ] ]     [ 3 ] ]
  134. @end example
  135. @end group
  136. @end ifinfo
  137. @tex
  138. \turnoffactive
  139. $$ \pmatrix{ 1 & 2 & 3 \cr 4 & 5 & 6 \cr 7 & 6 & 0 }
  140. X   \times
  141. X   \pmatrix{ a \cr b \cr c } = \pmatrix{ 6 \cr 2 \cr 3 }
  142. $$
  143. @end tex
  144. X
  145. We can solve this system of equations by multiplying both sides by the
  146. inverse of the matrix.  Calc can do this all in one step:
  147. X
  148. @group
  149. @smallexample
  150. 2:  [6, 2, 3]          1:  [-12.6, 15.2, -3.93333]
  151. 1:  [ [ 1, 2, 3 ]          .
  152. X      [ 4, 5, 6 ]
  153. X      [ 7, 6, 0 ] ]
  154. X    .
  155. X
  156. X    [6,2,3] r 5            /
  157. @end smallexample
  158. @end group
  159. X
  160. @noindent
  161. The result is the @cite{[a, b, c]} vector that solves the equations.
  162. (Dividing by a square matrix is equivalent to multiplying by its
  163. inverse.)
  164. X
  165. Let's verify this solution:
  166. X
  167. @group
  168. @smallexample
  169. 2:  [ [ 1, 2, 3 ]                1:  [6., 2., 3.]
  170. X      [ 4, 5, 6 ]                    .
  171. X      [ 7, 6, 0 ] ]
  172. 1:  [-12.6, 15.2, -3.93333]
  173. X    .
  174. X
  175. X    r 5  TAB                         *
  176. @end smallexample
  177. @end group
  178. X
  179. @noindent
  180. Note that we had to be careful about the order in which we multiplied
  181. the matrix and vector.  If we multiplied in the other order, Calc would
  182. assume the vector was a row vector in order to make the dimensions
  183. come out right, and the answer would be incorrect.  If you
  184. don't feel safe letting Calc take either interpretation of your
  185. vectors, use explicit @c{$N\times1$}
  186. @asis{Nx1} or @c{$1\times N$}
  187. @asis{1xN} matrices instead.
  188. In this case, you would enter the original column vector as
  189. @samp{[[6], [2], [3]]} or @samp{[6; 2; 3]}.
  190. X
  191. (@bullet{}) @strong{Exercise 2.}  Algebraic entry allows you to make
  192. vectors and matrices that include variables.  Solve the following
  193. system of equations to get expressions for @cite{x} and @cite{y}
  194. in terms of @cite{a} and @cite{b}.
  195. X
  196. @ifinfo
  197. @group
  198. @example
  199. X   x + a y = 6
  200. X   x + b y = 10
  201. @end example
  202. @end group
  203. @end ifinfo
  204. @tex
  205. \turnoffactive
  206. $$ \eqalign{ x &+ a y = 6 \cr
  207. X             x &+ b y = 10}
  208. $$
  209. @end tex
  210. X
  211. @noindent
  212. @xref{Matrix Answer 2, 2}. (@bullet{})
  213. X
  214. @cindex Least-squares for over-determined systems
  215. @cindex Over-determined systems of equations
  216. (@bullet{}) @strong{Exercise 3.}  A system of equations is ``over-determined''
  217. if it has more equations than variables.  It is often the case that
  218. there are no values for the variables that will satisfy all the
  219. equations at once, but it is still useful to find a set of values
  220. which ``nearly'' satisfy all the equations.  In terms of matrix equations,
  221. you can't solve @cite{A X = B} directly because the matrix @cite{A}
  222. is not square for an over-determined system.  Matrix inversion works
  223. only for square matrices.  One common trick is to multiply both sides
  224. on the left by the transpose of @cite{A}:
  225. @ifinfo
  226. @samp{trn(A)*A*X = trn(A)*B}.
  227. @end ifinfo
  228. @tex
  229. \turnoffactive
  230. $A^T A \, X = A^T B$, where $A^T$ is the transpose \samp{trn(A)}.
  231. @end tex
  232. Now @c{$A^T A$}
  233. @cite{trn(A)*A} is a square matrix so a solution is possible.  It
  234. turns out that the @cite{X} vector you compute in this way will be a
  235. ``least-squares'' solution, which can be regarded as the ``closest''
  236. solution to the set of equations.  Use Calc to solve the following
  237. over-determined system:@refill
  238. X
  239. @ifinfo
  240. @group
  241. @example
  242. X    a + 2b + 3c = 6
  243. X   4a + 5b + 6c = 2
  244. X   7a + 6b      = 3
  245. X   2a + 4b + 6c = 11
  246. @end example
  247. @end group
  248. @end ifinfo
  249. @tex
  250. \turnoffactive
  251. $$ \openup1\jot \tabskip=0pt plus1fil
  252. \halign to\displaywidth{\tabskip=0pt
  253. X   $\hfil#$&$\hfil{}#{}$&
  254. X   $\hfil#$&$\hfil{}#{}$&
  255. X   $\hfil#$&${}#\hfil$\tabskip=0pt plus1fil\cr
  256. X  a&+&2b&+&3c&=6 \cr
  257. X 4a&+&5b&+&6c&=2 \cr
  258. X 7a&+&6b& &  &=3 \cr
  259. X 2a&+&4b&+&6c&=11 \cr}
  260. $$
  261. @end tex
  262. X
  263. @noindent
  264. @xref{Matrix Answer 3, 3}. (@bullet{})
  265. X
  266. @node List Tutorial, , Matrix Tutorial, Vector/Matrix Tutorial
  267. @subsection Vectors as Lists
  268. X
  269. @noindent
  270. @cindex Lists
  271. Although Calc has a number of features for manipulating vectors and
  272. matrices as mathematical objects, you can also treat vectors as
  273. simple lists of values.  For example, we saw that the @kbd{k f}
  274. command returns a vector which is a list of the prime factors of a
  275. number.
  276. X
  277. You can pack and unpack stack entries into vectors:
  278. X
  279. @group
  280. @smallexample
  281. 3:  10         1:  [10, 20, 30]     3:  10
  282. 2:  20             .                2:  20
  283. 1:  30                              1:  30
  284. X    .                                   .
  285. X
  286. X                   M-3 v p              v u
  287. @end smallexample
  288. @end group
  289. X
  290. You can also build vectors out of consecutive integers, or out
  291. of many copies of a given value:
  292. X
  293. @group
  294. @smallexample
  295. 1:  [1, 2, 3, 4]    2:  [1, 2, 3, 4]    2:  [1, 2, 3, 4]
  296. X    .               1:  17              1:  [17, 17, 17, 17]
  297. X                        .                   .
  298. X
  299. X    v x 4 RET           17                  v b 4 RET
  300. @end smallexample
  301. @end group
  302. X
  303. You can apply an operator to every element of a vector using the
  304. @dfn{map} command.
  305. X
  306. @group
  307. @smallexample
  308. 1:  [17, 34, 51, 68]   1:  [289, 1156, 2601, 4624]  1:  [17, 34, 51, 68]
  309. X    .                      .                            .
  310. X
  311. X    V M *                  2 V M ^                      V M Q
  312. @end smallexample
  313. @end group
  314. X
  315. @noindent
  316. In the first step, we multiply the vector of integers by the vector
  317. of 17's elementwise.  In the second step, we raise each element to
  318. the power two.  (The general rule is that both operands must be
  319. vectors of the same length, or else one must be a vector and the
  320. other a plain number.)  In the final step, we take the square root
  321. of each element.
  322. X
  323. (@bullet{}) @strong{Exercise 1.}  Compute a vector of powers of two
  324. from @c{$2^{-4}$}
  325. @cite{2^-4} to @cite{2^4}.  @xref{List Answer 1, 1}. (@bullet{})
  326. X
  327. You can also @dfn{reduce} a binary operator across a vector.
  328. For example, reducing @samp{*} computes the product of all the
  329. elements in the vector:
  330. X
  331. @group
  332. @smallexample
  333. 1:  123123     1:  [3, 7, 11, 13, 41]      1:  123123
  334. X    .              .                           .
  335. X
  336. X    123123         k f                         V R *
  337. @end smallexample
  338. @end group
  339. X
  340. @noindent
  341. In this example, we decompose 123123 into its prime factors, then
  342. multiply those factors together again to yield the original number.
  343. X
  344. We could compute a dot product ``by hand'' using mapping and
  345. reduction:
  346. X
  347. @group
  348. @smallexample
  349. 2:  [1, 2, 3]     1:  [7, 12, 0]     1:  19
  350. 1:  [7, 6, 0]         .                  .
  351. X    .
  352. X
  353. X    r 1 r 2           V M *              V R +
  354. @end smallexample
  355. @end group
  356. X
  357. @noindent
  358. Recalling two vectors from the previous section, we compute the
  359. sum of pairwise products of the elements to get the same answer
  360. for the dot product as before.
  361. X
  362. A slight variant of vector reduction is the @dfn{accumulate} operation,
  363. @kbd{V U}.  This produces a vector of the intermediate results from
  364. a corresponding reduction.  Here we compute a table of factorials:
  365. X
  366. @group
  367. @smallexample
  368. 1:  [1, 2, 3, 4, 5, 6]    1:  [1, 2, 6, 24, 120, 720]
  369. X    .                         .
  370. X
  371. X    v x 6 RET                 V U *
  372. @end smallexample
  373. @end group
  374. X
  375. Calc allows vectors to grow as large as you like, although it gets
  376. rather slow if vectors have more than about a hundred elements.
  377. Actually, most of the time is spent formatting these large vectors
  378. for display, not calculating on them.  Try the following experiment
  379. (if your computer is very fast you may need to substitute a larger
  380. vector size).
  381. X
  382. @group
  383. @smallexample
  384. 1:  [1, 2, 3, 4, ...      1:  [2, 3, 4, 5, ...
  385. X    .                         .
  386. X
  387. X    v x 500 RET               1 V M +
  388. @end smallexample
  389. @end group
  390. X
  391. Now press @kbd{v .} (the letter @kbd{v}, then a period) and try the
  392. experiment again.  In @kbd{v .} mode, long vectors are displayed
  393. ``abbreviated'' like this:
  394. X
  395. @group
  396. @smallexample
  397. 1:  [1, 2, 3, ..., 500]   1:  [2, 3, 4, ..., 501]
  398. X    .                         .
  399. X
  400. X    v x 500 RET               1 V M +
  401. @end smallexample
  402. @end group
  403. X
  404. @noindent
  405. (where now the @samp{...} is actually part of the Calc display).
  406. You will find both operations are now much faster.  But notice that
  407. even in @w{@kbd{v .}} mode, the full vectors are still shown in the Trail.
  408. Type @w{@kbd{t .}} to cause the trail to abbreviate as well, and try the
  409. experiment one more time.  Operations on long vectors are now quite
  410. fast!  (But of course if you use @kbd{t .} you will lose the ability
  411. to get old vectors back using the @kbd{t y} command.)
  412. X
  413. An easy way to view a full vector when @kbd{v .} mode is active is
  414. to press @kbd{`} (back-quote) to edit the vector; editing always works
  415. with the full, unabbreviated value.
  416. X
  417. @cindex Least-squares for fitting a straight line
  418. @cindex Fitting data to a line
  419. @cindex Line, fitting data to
  420. @cindex Data, extracting from buffers
  421. @cindex Columns of data, extracting
  422. As a larger example, let's try to fit a straight line to some data,
  423. using the method of least squares.  (Calc has a built-in command for
  424. least-squares curve fitting, but we'll do it by hand here just to
  425. practice working with vectors.)  Suppose we have the following list
  426. of values in a file we have loaded into Emacs:
  427. X
  428. @smallexample
  429. X  x        y
  430. X ---      ---
  431. X 1.34    0.234
  432. X 1.41    0.298
  433. X 1.49    0.402
  434. X 1.56    0.412
  435. X 1.64    0.466
  436. X 1.73    0.473
  437. X 1.82    0.601
  438. X 1.91    0.519
  439. X 2.01    0.603
  440. X 2.11    0.637
  441. X 2.22    0.645
  442. X 2.33    0.705
  443. X 2.45    0.917
  444. X 2.58    1.009
  445. X 2.71    0.971
  446. X 2.85    1.062
  447. X 3.00    1.148
  448. X 3.15    1.157
  449. X 3.32    1.354
  450. @end smallexample
  451. X
  452. @noindent
  453. If you are reading this tutorial in printed form, you will find it
  454. easiest to press @kbd{M-# i} to enter the on-line Info version of
  455. the manual and find this table there.  (Press @kbd{g}, then type
  456. @kbd{List Tutorial}, to jump straight to this section.)
  457. X
  458. Position the cursor at the upper-left corner of this table, just
  459. to the left of the @cite{1.34}.  Press @kbd{C-@@} to set the mark.
  460. (On your system this may be @kbd{C-2}, @kbd{C-SPC}, or @kbd{NUL}.)
  461. Now position the cursor to the lower-right, just after the @cite{1.354}.
  462. You have now defined this region as an Emacs ``rectangle.''  Still
  463. in the Info buffer, type @kbd{M-# r}.  This command
  464. (@code{calc-grab-rectangle}) will pop you back into the Calculator, with
  465. the contents of the rectangle you specified in the form of a matrix.@refill
  466. X
  467. @group
  468. @smallexample
  469. 1:  [ [ 1.34, 0.234 ]
  470. X      [ 1.41, 0.298 ]
  471. X      @dots{}
  472. @end smallexample
  473. @end group
  474. X
  475. @noindent
  476. (You may wish to use @kbd{v .} mode to abbreviate the display of this
  477. large matrix.)
  478. X
  479. We want to treat this as a pair of lists.  The first step is to
  480. transpose this matrix into a pair of rows.  Remember, a matrix is
  481. just a vector of vectors.  So we can unpack the matrix into a pair
  482. of row vectors on the stack.
  483. X
  484. @group
  485. @smallexample
  486. 1:  [ [ 1.34,  1.41,  1.49,  ... ]     2:  [1.34, 1.41, 1.49, ... ]
  487. X      [ 0.234, 0.298, 0.402, ... ] ]   1:  [0.234, 0.298, 0.402, ... ]
  488. X    .                                      .
  489. X
  490. X    v t                                    v u
  491. @end smallexample
  492. @end group
  493. X
  494. @noindent
  495. Let's store these in quick variables 1 and 2, respectively.
  496. X
  497. @group
  498. @smallexample
  499. 1:  [1.34, 1.41, 1.49, ... ]        .
  500. X    .
  501. X
  502. X    t 2                             t 1
  503. @end smallexample
  504. @end group
  505. X
  506. @noindent
  507. (Recall that @kbd{t 2} is a variant of @kbd{s 2} that removes the
  508. stored value from the stack.)
  509. X
  510. In a least squares fit, the slope @cite{m} is given by the formula
  511. X
  512. @ifinfo
  513. @example
  514. m = (N sum(x y) - sum(x) sum(y)) / (N sum(x^2) - sum(x)^2)
  515. @end example
  516. @end ifinfo
  517. @tex
  518. \turnoffactive
  519. $$ m = {N \sum x y - \sum x \sum y  \over
  520. X        N \sum x^2 - \left( \sum x \right)^2} $$
  521. @end tex
  522. X
  523. @noindent
  524. where @c{$\sum x$}
  525. @cite{sum(x)} represents the sum of all the values of @cite{x}.
  526. While there is an actual @code{sum} function in Calc, it's easier to
  527. sum a vector using a simple reduction.  First, let's compute the four
  528. different sums that this formula uses.
  529. X
  530. @group
  531. @smallexample
  532. 1:  41.63                 1:  98.0003
  533. X    .                         .
  534. X
  535. X r 1 V R +   t 3           r 1 2 V M ^ V R +   t 4
  536. X
  537. @end smallexample
  538. @end group
  539. @noindent
  540. @group
  541. @smallexample
  542. 1:  13.613                1:  33.36554
  543. X    .                         .
  544. X
  545. X r 2 V R +   t 5           r 1 r 2 V M * V R +   t 6
  546. @end smallexample
  547. @end group
  548. X
  549. @ifinfo
  550. @noindent
  551. These are @samp{sum(x)}, @samp{sum(x^2)}, @samp{sum(y)}, and @samp{sum(x y)},
  552. respectively.  (We could have used @kbd{*} to compute @samp{sum(x^2)} and
  553. @samp{sum(x y)}.)
  554. @end ifinfo
  555. @tex
  556. \turnoffactive
  557. These are $\sum x$, $\sum x^2$, $\sum y$, and $\sum x y$,
  558. respectively.  (We could have used \kbd{*} to compute $\sum x^2$ and
  559. $\sum x y$.)
  560. @end tex
  561. X
  562. Finally, we also need @cite{N}, the number of data points.  This is just
  563. the length of either of our lists.
  564. X
  565. @group
  566. @smallexample
  567. 1:  19
  568. X    .
  569. X
  570. X r 1 v l   t 7
  571. @end smallexample
  572. @end group
  573. X
  574. @noindent
  575. (That's @kbd{v} followed by a lower-case @kbd{l}.)
  576. X
  577. Now we grind through the formula:
  578. X
  579. @group
  580. @smallexample
  581. 1:  633.94526  2:  633.94526  1:  67.23607
  582. X    .          1:  566.70919      .
  583. X                   .
  584. X
  585. X r 7 r 6 *      r 3 r 5 *         -
  586. X
  587. @end smallexample
  588. @end group
  589. @noindent
  590. @group
  591. @smallexample
  592. 2:  67.23607   3:  67.23607   2:  67.23607   1:  0.52141679
  593. 1:  1862.0057  2:  1862.0057  1:  128.9488       .
  594. X    .          1:  1733.0569      .
  595. X                   .
  596. X
  597. X r 7 r 4 *      r 3 2 ^           -              /   t 8
  598. @end smallexample
  599. @end group
  600. X
  601. That gives us the slope @cite{m}.  The y-intercept @cite{b} can now
  602. be found with the simple formula,
  603. X
  604. @ifinfo
  605. @example
  606. b = (sum(y) - m sum(x)) / N
  607. @end example
  608. @end ifinfo
  609. @tex
  610. \turnoffactive
  611. $$ b = {\sum y - m \sum x \over N} $$
  612. @end tex
  613. X
  614. @group
  615. @smallexample
  616. 1:  13.613     2:  13.613     1:  -8.09358   1:  -0.425978
  617. X    .          1:  21.70658       .              .
  618. X                   .
  619. X
  620. X   r 5            r 8 r 3 *       -              r 7 /   t 9
  621. @end smallexample
  622. @end group
  623. X
  624. Let's ``plot'' this straight line approximation, @c{$y \approx m x + b$}
  625. @cite{m x + b}, and compare it with the original data.@refill
  626. X
  627. @group
  628. @smallexample
  629. 1:  [0.699, 0.735, ... ]    1:  [0.273, 0.309, ... ]
  630. X    .                           .
  631. X
  632. X    r 1 r 8 *                   r 9 +    s 0
  633. @end smallexample
  634. @end group
  635. X
  636. @noindent
  637. Notice that multiplying a vector by a constant, and adding a constant
  638. to a vector, can be done without mapping commands since these are
  639. common operations from vector algebra.  As far as Calc is concerned,
  640. we've just been doing geometry in 19-dimensional space!
  641. X
  642. We can subtract this vector from our original @cite{y} vector to get
  643. a feel for the error of our fit.  Let's find the maximum error:
  644. X
  645. @group
  646. @smallexample
  647. 1:  [0.0387, 0.0112, ... ]   1:  [0.0387, 0.0112, ... ]   1:  0.0897
  648. X    .                            .                            .
  649. X
  650. X    r 2 -                        V M A                        V R X
  651. @end smallexample
  652. @end group
  653. X
  654. @noindent
  655. First we compute a vector of differences, then we take the absolute
  656. values of these differences, then we reduce the @code{max} function
  657. across the vector.  (The @code{max} function is on the two-key sequence
  658. @kbd{f x}; because it is so common to use @code{max} in a vector
  659. operation, the letters @kbd{X} and @kbd{N} are also accepted for
  660. @code{max} and @code{min} in this context.  In general, you answer
  661. the @kbd{V M} or @kbd{V R} prompt with the actual key sequence that
  662. invokes the function you want.  You could have typed @kbd{V R f x} or
  663. even @kbd{V R x max @key{RET}} if you had preferred.)
  664. X
  665. If your system has the GNUPLOT program, you can see graphs of your
  666. data and your straight line to see how well they match.  (If you have
  667. GNUPLOT 3.0, the following instructions will work regardless of the
  668. kind of display you have.  Some GNUPLOT 2.0, non-X-windows systems
  669. may require additional steps to view the graphs.)
  670. X
  671. Let's start by plotting the original data.  Recall the ``@i{x}'' and ``@i{y}''
  672. vectors onto the stack and press @kbd{g f}.  This ``fast'' graphing
  673. command does everything you need to do for simple, straightforward
  674. plotting of data.
  675. X
  676. @group
  677. @smallexample
  678. 2:  [1.34, 1.41, 1.49, ... ]
  679. 1:  [0.234, 0.298, 0.402, ... ]
  680. X    .
  681. X
  682. X    r 1 r 2    g f
  683. @end smallexample
  684. @end group
  685. X
  686. If all goes well, you will shortly get a new window containing a graph
  687. of the data.  (If not, contact your GNUPLOT or Calc installer to find
  688. out what went wrong.)  In the X window system, this will be a separate
  689. graphics window.  In other kinds of displays, the default is to
  690. display the graphics in Emacs itself using rough character graphics.
  691. Press @kbd{q} when you are done viewing the character graphics.
  692. X
  693. Next, let's add the line we got from our least-squares fit:
  694. X
  695. @group
  696. @smallexample
  697. 2:  [1.34, 1.41, 1.49, ... ]
  698. 1:  [0.273, 0.309, 0.351, ... ]
  699. X    .
  700. X
  701. X    DEL r 0    g a  g p
  702. @end smallexample
  703. @end group
  704. X
  705. It's not very useful to get symbols to mark the data points on this
  706. second curve; you can type @kbd{g S g p} to remove them.  Type @kbd{g q}
  707. when you are done to remove the X graphics window and terminate GNUPLOT.
  708. X
  709. (@bullet{}) @strong{Exercise 2.}  An earlier exercise showed how to do
  710. least squares fitting to a general system of equations.  Our 19 data
  711. points are really 19 equations of the form @cite{y_i = m x_i + b} for
  712. different pairs of @cite{(x_i,y_i)}.  Use the matrix-transpose method
  713. to solve for @cite{m} and @cite{b}, duplicating the above result.
  714. @xref{List Answer 2, 2}. (@bullet{})
  715. X
  716. @cindex Geometric mean
  717. (@bullet{}) @strong{Exercise 3.}  If the input data do not form a
  718. rectangle, you can use @w{@kbd{M-# g}} (@code{calc-grab-region})
  719. to grab the data the way Emacs normally works with regions---it reads
  720. left-to-right, top-to-bottom, treating line breaks the same as spaces.
  721. Use this command to find the geometric mean of the following numbers.
  722. (The geometric mean is the @var{n}th root of the product of @var{n} numbers.)
  723. X
  724. @example
  725. 2.3  6  22  15.1  7
  726. X  15  14  7.5
  727. X  2.5
  728. @end example
  729. X
  730. @noindent
  731. The @kbd{M-# g} command accepts numbers separated by spaces or commas,
  732. with or without surrounding vector brackets.
  733. @xref{List Answer 3, 3}. (@bullet{})
  734. X
  735. @ifinfo
  736. As another example, a theorem about binomial coefficients tells
  737. us that the alternating sum of binomial coefficients
  738. @var{n}-choose-0 minus @var{n}-choose-1 plus @var{n}-choose-2, and so
  739. on up to @var{n}-choose-@var{n},
  740. always comes out to zero.  Let's verify this
  741. for @cite{n=6}.@refill
  742. @end ifinfo
  743. @tex
  744. As another example, a theorem about binomial coefficients tells
  745. us that the alternating sum of binomial coefficients
  746. ${n \choose 0} - {n \choose 1} + {n \choose 2} - \cdots \pm {n \choose n}$
  747. always comes out to zero.  Let's verify this
  748. for \cite{n=6}.
  749. @end tex
  750. X
  751. @group
  752. @smallexample
  753. 1:  [1, 2, 3, 4, 5, 6, 7]     1:  [0, 1, 2, 3, 4, 5, 6]
  754. X    .                             .
  755. X
  756. X    v x 7 RET                     1 -
  757. X
  758. @end smallexample
  759. @end group
  760. @noindent
  761. @group
  762. @smallexample
  763. 1:  [1, -6, 15, -20, 15, -6, 1]          1:  0
  764. X    .                                        .
  765. X
  766. X    V M ' (-1)^$ choose(6,$) RET             V R +
  767. @end smallexample
  768. @end group
  769. X
  770. The @kbd{V M '} command prompts you to enter any algebraic expression
  771. to define the function to map over the vector.  The symbol @samp{$}
  772. inside this expression represents the argument to the function.
  773. The Calculator applies this formula to each element of the vector,
  774. substituting each element's value for the @samp{$} sign(s) in turn.
  775. X
  776. To define a two-argument function, use @samp{$$} for the first
  777. argument and @samp{$} for the second:  @kbd{V M ' $$-$ RET} is
  778. equivalent to @kbd{V M -}.  This is analogous to regular algebraic
  779. entry, where @samp{$$} would refer to the next-to-top stack entry
  780. and @samp{$} would refer to the top stack entry, and @kbd{' $$-$ RET}
  781. would act exactly like @kbd{-}.
  782. X
  783. Notice that the @kbd{V M '} command has recorded two things in the
  784. trail:  The result, as usual, and also a funny-looking thing marked
  785. @samp{oper} that represents the operator function you typed in.
  786. The function is enclosed in @samp{< >} brackets, and the argument is
  787. denoted by a @samp{#} sign.  If there were several arguments, they
  788. would be shown as @samp{#1}, @samp{#2}, and so on.  (For example,
  789. @kbd{V M ' $$-$} will put the function @samp{<#1 - #2>} on the
  790. trail.)  This object is a ``nameless function''; you can use nameless
  791. @samp{< >} notation to answer the @kbd{V M '} prompt if you like.
  792. Nameless function notation has the interesting, occasionally useful
  793. property that a nameless function is not actually evaluated until
  794. it is used.  For example, @kbd{V M ' $+random(2.0)} evaluates
  795. @samp{random(2.0)} once and adds that random number to all elements
  796. of the vector, but @kbd{V M ' <#+random(2.0)>} evaluates the
  797. @samp{random(2.0)} separately for each vector element.
  798. X
  799. Another group of operators that are often useful with @kbd{V M} are
  800. the relational operators:  @kbd{a =}, for example, compares two numbers
  801. and gives the result 1 if they are equal, or 0 if not.  Similarly,
  802. @w{@kbd{a <}} checks for one number being less than another.
  803. X
  804. Other useful vector operations include @kbd{v v}, to reverse a
  805. vector end-for-end; @kbd{V S}, to sort the elements of a vector
  806. into increasing order; and @kbd{v r} and @w{@kbd{v c}}, to extract
  807. one row or column of a matrix, or (in both cases) to extract one
  808. element of a plain vector.  With a negative argument, @kbd{v r}
  809. and @kbd{v c} instead delete one row, column, or vector element.
  810. X
  811. @cindex Divisor functions
  812. (@bullet{}) @strong{Exercise 4.}  The @cite{k}th @dfn{divisor function}
  813. @tex
  814. $\sigma_k(n)$
  815. @end tex
  816. is the sum of the @cite{k}th powers of all the divisors of an
  817. integer @cite{n}.  Figure out a method for computing the divisor
  818. function for reasonably small values of @cite{n}.  As a test,
  819. the 0th and 1st divisor functions of 30 are 8 and 72, respectively.
  820. @xref{List Answer 4, 4}. (@bullet{})
  821. X
  822. @cindex Square-free numbers
  823. @cindex Duplicate values in a list
  824. (@bullet{}) @strong{Exercise 5.}  The @kbd{k f} command produces a
  825. list of prime factors for a number.  Sometimes it is important to
  826. know that a number is @dfn{square-free}, i.e., that no prime occurs
  827. more than once in its list of prime factors.  Find a sequence of
  828. keystrokes to tell if a number is square-free; your method should
  829. leave 1 on the stack if it is, or 0 if it isn't.
  830. @xref{List Answer 5, 5}. (@bullet{})
  831. X
  832. @cindex Triangular lists
  833. (@bullet{}) @strong{Exercise 6.}  Build a list of lists that looks
  834. like the following diagram.  (You may wish to use the @kbd{v /}
  835. command to enable multi-line display of vectors.)
  836. X
  837. @group
  838. @smallexample
  839. 1:  [ [1],
  840. X      [1, 2],
  841. X      [1, 2, 3],
  842. X      [1, 2, 3, 4],
  843. X      [1, 2, 3, 4, 5],
  844. X      [1, 2, 3, 4, 5, 6] ]
  845. @end smallexample
  846. @end group
  847. X
  848. @noindent
  849. @xref{List Answer 6, 6}. (@bullet{})
  850. X
  851. (@bullet{}) @strong{Exercise 7.}  Build the following list of lists.
  852. X
  853. @group
  854. @smallexample
  855. 1:  [ [0],
  856. X      [1, 2],
  857. X      [3, 4, 5],
  858. X      [6, 7, 8, 9],
  859. X      [10, 11, 12, 13, 14],
  860. X      [15, 16, 17, 18, 19, 20] ]
  861. @end smallexample
  862. @end group
  863. X
  864. @noindent
  865. @xref{List Answer 7, 7}. (@bullet{})
  866. X
  867. @cindex Maximizing a function over a list of values
  868. @c [fix-ref Numerical Solutions]
  869. (@bullet{}) @strong{Exercise 8.}  Compute a list of values of Bessel's
  870. @c{$J_1(x)$}
  871. @cite{J1} function @samp{besJ(1,x)} for @cite{x} from 0 to 5
  872. in steps of 0.25.
  873. Find the value of @cite{x} (from among the above set of values) for
  874. which @samp{besJ(1,x)} is a maximum.  Use an ``automatic'' method,
  875. i.e., just reading along the list by hand to find the largest value
  876. is not allowed!  (There is an @kbd{a X} command which does this kind
  877. of thing automatically; @pxref{Numerical Solutions}.)
  878. @xref{List Answer 8, 8}. (@bullet{})@refill
  879. X
  880. @cindex Digits, vectors of
  881. (@bullet{}) @strong{Exercise 9.}  You are given an integer in the range
  882. @c{$0 \le N < 10^m$}
  883. @cite{0 <= N < 10^m} for @cite{m=12} (i.e., an integer of less than
  884. twelve digits).  Convert this integer into a vector of @cite{m}
  885. digits, each in the range from 0 to 9.  In vector-of-digits notation,
  886. add one to this integer to produce a vector of @cite{m+1} digits
  887. (since there could be a carry out of the most significant digit).
  888. Convert this vector back into a regular integer.  A good integer
  889. to try is 25129925999.  @xref{List Answer 9, 9}. (@bullet{})
  890. X
  891. (@bullet{}) @strong{Exercise 10.}  Your friend Joe tried to use
  892. @kbd{V R a =} to test if all numbers in a list were equal.  What
  893. happened?  How would you do this test?  @xref{List Answer 10, 10}. (@bullet{})
  894. X
  895. (@bullet{}) @strong{Exercise 11.}  The area of a circle of radius one
  896. is @c{$\pi$}
  897. @cite{pi}.  The area of the @c{$2\times2$}
  898. @asis{2x2} square that encloses that
  899. circle is 4.  So if we throw @i{N} darts at random points in the square,
  900. about @c{$\pi/4$}
  901. @cite{pi/4} of them will land inside the circle.  This gives us
  902. an entertaining way to estimate the value of @c{$\pi$}
  903. @cite{pi}.  The @w{@kbd{k r}}
  904. command picks a random number between zero and the value on the stack.
  905. We could get a random floating-point number between @i{-1} and 1 by typing
  906. @w{@kbd{2.0 k r 1 -}}.  Build a vector of 100 random @cite{(x,y)} points in
  907. this square, then use vector mapping and reduction to count how many
  908. points lie inside the unit circle.  Hint:  Use the @kbd{v b} command.
  909. @xref{List Answer 11, 11}. (@bullet{})
  910. X
  911. @cindex Matchstick problem
  912. (@bullet{}) @strong{Exercise 12.}  The @dfn{matchstick problem} provides
  913. another way to calculate @c{$\pi$}
  914. @cite{pi}.  Say you have an infinite field
  915. of vertical lines with a spacing of one inch.  Toss a one-inch matchstick
  916. onto the field.  The probability that the matchstick will land crossing
  917. a line turns out to be @c{$2/\pi$}
  918. @cite{2/pi}.  Toss 100 matchsticks to estimate
  919. @c{$\pi$}
  920. @cite{pi}.  (If you want still more fun, the probability that the GCD
  921. (@w{@kbd{k g}}) of two large integers is one turns out to be @c{$6/\pi^2$}
  922. @cite{6/pi^2}.
  923. That provides yet another way to estimate @c{$\pi$}
  924. @cite{pi}.)
  925. @xref{List Answer 12, 12}. (@bullet{})
  926. X
  927. (@bullet{}) @strong{Exercise 13.}  An algebraic entry of a string in
  928. double-quote marks, @samp{"hello"}, creates a vector of the numerical
  929. (ASCII) codes of the characters (here, @cite{[104, 101, 108, 108, 111]}).
  930. Sometimes it is convenient to compute a @dfn{hash code} of a string,
  931. which is just an integer that represents the value of that string.
  932. Two equal strings have the same hash code; two different strings
  933. @dfn{probably} have different hash codes.  (For example, Calc has
  934. over 400 function names, but Emacs can quickly find the definition for
  935. any given name because it has sorted the functions into ``buckets'' by
  936. their hash codes.  Sometimes a few names will hash into the same bucket,
  937. but it is easier to search among a few names than among all the names.)
  938. One popular hash function is computed as follows:  First set @cite{h = 0}.
  939. Then, for each character from the string in turn, set @cite{h = 3h + c_i}
  940. where @cite{c_i} is the character's ASCII code.  If we have 511 buckets,
  941. we then take the hash code modulo 511 to get the bucket number.  Develop a
  942. simple command or commands for converting string vectors into hash codes.
  943. The hash code for @samp{"Testing, 1, 2, 3"} is 1960915098, which modulo
  944. 511 is 121.  @xref{List Answer 13, 13}. (@bullet{})
  945. X
  946. (@bullet{}) @strong{Exercise 14.}  The @kbd{H V R} and @kbd{H V U}
  947. commands do nested function evaluations.  @kbd{H V U} takes a starting
  948. value and a number of steps @var{n} from the stack; it then applies the
  949. function you give to the starting value 0, 1, 2, up to @var{n} times
  950. and returns a vector of the results.  Use this command to create a
  951. ``random walk'' of 50 steps.  Start with the two-dimensional point
  952. @cite{(0,0)}; then take one step a random distance between @i{-1} and 1
  953. in both @cite{x} and @cite{y}; then take another step, and so on.  Use the
  954. @kbd{g f} command to display this random walk.  Now modify your random
  955. walk to walk a unit distance, but in a random direction, at each step.
  956. (Hint:  The @code{sincos} function returns a vector of the cosine and
  957. sine of an angle.)  @xref{List Answer 14, 14}. (@bullet{})
  958. X
  959. @node Types Tutorial, Algebra Tutorial, Vector/Matrix Tutorial, Tutorial
  960. @section Types Tutorial
  961. X
  962. @noindent
  963. Calc understands a variety of data types as well as simple numbers.
  964. In this section, we'll experiment with each of these types in turn.
  965. X
  966. The numbers we've been using so far have mainly been either @dfn{integers}
  967. or @dfn{floats}.  We saw that floats are usually a good approximation to
  968. the mathematical concept of real numbers, but they are only approximations
  969. and are susceptible to roundoff error.  Calc also supports @dfn{fractions},
  970. which can exactly represent any rational number.
  971. X
  972. @group
  973. @smallexample
  974. 1:  3628800    2:  3628800    1:  518400:7   1:  518414:7   1:  7:518414
  975. X    .          1:  49             .              .              .
  976. X                   .
  977. X
  978. X    10 !           49 RET         :              2 +            &
  979. @end smallexample
  980. @end group
  981. X
  982. @noindent
  983. The @kbd{:} command divides two integers to get a fraction; @kbd{/}
  984. would normally divide integers to get a floating-point result.
  985. Notice we had to type @key{RET} between the @kbd{49} and the @kbd{:}
  986. since the @kbd{:} would otherwise be interpreted as part of a
  987. fraction beginning with 49.
  988. X
  989. You can convert between floating-point and fractional format using
  990. @kbd{c f} and @kbd{c F}:
  991. X
  992. @group
  993. @smallexample
  994. 1:  1.35027217629e-5    1:  7:518414
  995. X    .                       .
  996. X
  997. X    c f                     c F
  998. @end smallexample
  999. @end group
  1000. X
  1001. The @kbd{c F} command replaces a floating-point number with the
  1002. ``simplest'' fraction whose floating-point representation is the
  1003. same, to within the current precision.
  1004. X
  1005. @group
  1006. @smallexample
  1007. 1:  3.14159265359   1:  1146408:364913   1:  3.1416   1:  355:113
  1008. X    .                   .                    .            .
  1009. X
  1010. X    P                   c F      DEL       p 5 RET P      c F
  1011. @end smallexample
  1012. @end group
  1013. X
  1014. (@bullet{}) @strong{Exercise 1.}  A calculation has produced the
  1015. result 1.26508260337.  You suspect it is the square root of the
  1016. product of @c{$\pi$}
  1017. @cite{pi} and some rational number.  Is it?  (Be sure
  1018. to allow for roundoff error!)  @xref{Types Answer 1, 1}. (@bullet{})
  1019. X
  1020. @dfn{Complex numbers} can be stored in both rectangular and polar form.
  1021. X
  1022. @group
  1023. @smallexample
  1024. 1:  -9     1:  (0, 3)    1:  (3; 90.)   1:  (6; 90.)   1:  (2.4495; 45.)
  1025. X    .          .             .              .              .
  1026. X
  1027. X    9 n        Q             c p            2 *            Q
  1028. @end smallexample
  1029. @end group
  1030. X
  1031. @noindent
  1032. The square root of @i{-9} is by default rendered in rectangular form
  1033. (@w{@cite{0 + 3i}}), but we can convert it to polar form (3 with a
  1034. phase angle of 90 degrees).  All the usual arithmetic and scientific
  1035. operations are defined on both types of complex numbers.
  1036. X
  1037. Another generalized kind of number is @dfn{infinity}.  Infinity
  1038. isn't really a number, but it can sometimes be treated like one.
  1039. Calc uses the symbol @code{inf} to represent positive infinity,
  1040. i.e., a value greater than any real number.  Naturally, you can
  1041. also write @samp{-inf} for minus infinity, a value less than any
  1042. real number.  The word @code{inf} can only be input using
  1043. algebraic entry.
  1044. X
  1045. @group
  1046. @smallexample
  1047. 2:  inf        2:  -inf       2:  -inf       2:  -inf       1:  nan
  1048. 1:  -17        1:  -inf       1:  -inf       1:  inf            .
  1049. X    .              .              .              .
  1050. X
  1051. ' inf RET 17 n     *  RET         72 +           A              +
  1052. @end smallexample
  1053. @end group
  1054. X
  1055. @noindent
  1056. Since infinity is infinitely large, multiplying it by any finite
  1057. number (like @i{-17}) has no effect, except that since @i{-17}
  1058. is negative, it changes a plus infinity to a minus infinity.
  1059. (``A huge positive number, multiplied by @i{-17}, yields a huge
  1060. negative number.'')  Adding any finite number to infinity also
  1061. leaves it unchanged.  Taking an absolute value gives us plus
  1062. infinity again.  Finally, we add this plus infinity to the minus
  1063. infinity we had earlier.  If you work it out, you might expect
  1064. the answer to be @i{-72} for this.  But the 72 has been completely
  1065. lost next to the infinities; by the time we compute @w{@samp{inf - inf}}
  1066. the finite difference between them, if any, is indetectable.
  1067. So we say the result is @dfn{indeterminate}, which Calc writes
  1068. with the symbol @code{nan} (for Not A Number).
  1069. X
  1070. Dividing by zero is normally treated as an error, but you can get
  1071. Calc to write an answer in terms of infinity by pressing @kbd{m i}
  1072. to turn on ``infinite mode.''
  1073. X
  1074. @group
  1075. @smallexample
  1076. 3:  nan        2:  nan        2:  nan        2:  nan        1:  nan
  1077. 2:  1          1:  1 / 0      1:  uinf       1:  uinf           .
  1078. 1:  0              .              .              .
  1079. X    .
  1080. X
  1081. X  1 RET 0          /       m i    U /            17 n *         +
  1082. @end smallexample
  1083. @end group
  1084. X
  1085. @noindent
  1086. Dividing by zero normally is left unevaluated, but after @kbd{m i}
  1087. it instead gives an infinite result.  The answer is actually
  1088. @code{uinf}, ``undirected infinity.''  If you look at a graph of
  1089. @cite{1 / x} around @w{@cite{x = 0}}, you'll see that it goes toward
  1090. plus infinity as you approach zero from above, but toward minus
  1091. infinity as you approach from below.  Since we said only @cite{1 / 0},
  1092. Calc knows that the answer is infinite but not in which direction.
  1093. That's what @code{uinf} means.  Notice that multiplying @code{uinf}
  1094. by a negative number still leaves plain @code{uinf}; there's no
  1095. point in saying @samp{-uinf} because the sign of @code{uinf} is
  1096. unknown anyway.  Finally, we add @code{uinf} to our @code{nan},
  1097. yielding @code{nan} again.  It's easy to see that, because
  1098. @code{nan} means ``totally unknown'' while @code{uinf} means
  1099. ``unknown sign but known to be infinite,'' the more mysterious
  1100. @code{nan} wins out when it is combined with @code{uinf}, or, for
  1101. that matter, with anything else.
  1102. X
  1103. (@bullet{}) @strong{Exercise 2.}  Predict what Calc will answer
  1104. for each of these formulas:  @samp{inf / inf}, @samp{exp(inf)},
  1105. @samp{exp(-inf)}, @samp{sqrt(-inf)}, @samp{sqrt(uinf)},
  1106. @samp{abs(uinf)}, @samp{ln(0)}.
  1107. @xref{Types Answer 2, 2}. (@bullet{})
  1108. X
  1109. (@bullet{}) @strong{Exercise 3.}  We saw that @samp{inf - inf = nan},
  1110. which stands for an unknown value.  Can @code{nan} stand for
  1111. a complex number?  Can it stand for infinity?
  1112. @xref{Types Answer 3, 3}. (@bullet{})
  1113. X
  1114. @dfn{HMS forms} represent a value in terms of hours, minutes, and
  1115. seconds.
  1116. X
  1117. @group
  1118. @smallexample
  1119. 1:  2@@ 30' 0"     1:  3@@ 30' 0"     2:  3@@ 30' 0"     1:  2.
  1120. X    .                 .             1:  1@@ 45' 0."        .
  1121. X                                        .
  1122. X
  1123. X  2@@ 30' RET          1 +               RET 2 /           /
  1124. @end smallexample
  1125. @end group
  1126. X
  1127. HMS forms can also be used to hold angles in degrees, minutes, and
  1128. seconds.
  1129. X
  1130. @group
  1131. @smallexample
  1132. 1:  0.5        1:  26.56505   1:  26@@ 33' 54.18"    1:  0.44721
  1133. X    .              .              .                     .
  1134. X
  1135. X    0.5            I T            c h                   S
  1136. @end smallexample
  1137. @end group
  1138. X
  1139. @noindent
  1140. First we convert the inverse tangent of 0.5 to degrees-minutes-seconds
  1141. form, then we take the sine of that angle.  Note that the trigonometric
  1142. functions will accept HMS forms directly as input.
  1143. X
  1144. @cindex Beatles
  1145. (@bullet{}) @strong{Exercise 4.}  The Beatles' @emph{Abbey Road} is
  1146. 47 minutes and 26 seconds long, and contains 17 songs.  What is the
  1147. average length of a song on @emph{Abbey Road}?  If the Extended Disco
  1148. Version of @emph{Abbey Road} added 20 seconds to the length of each
  1149. song, how long would the album be?  @xref{Types Answer 4, 4}. (@bullet{})
  1150. X
  1151. A @dfn{date form} represents a date, or a date and time.  Dates must
  1152. be entered using algebraic entry.  Date forms are surrounded by
  1153. @samp{< >} symbols; most standard formats for dates are recognized.
  1154. X
  1155. @group
  1156. @smallexample
  1157. 2:  <Sun Jan 13, 1991>                    1:  2.25
  1158. 1:  <6:00pm Thu Jan 10, 1991>                 .
  1159. X    .
  1160. X
  1161. ' <13 Jan 1991>, <1/10/91, 6pm> RET           -
  1162. @end smallexample
  1163. @end group
  1164. X
  1165. @noindent
  1166. In this example, we enter two dates, then subtract to find the
  1167. number of days between them.  It is also possible to add an
  1168. HMS form or a number (of days) to a date form to get another
  1169. date form.
  1170. X
  1171. @group
  1172. @smallexample
  1173. 1:  <4:45:59pm Mon Jan 14, 1991>     1:  <2:50:59am Thu Jan 17, 1991>
  1174. X    .                                    .
  1175. X
  1176. X    t N                                  2 + 10@@ 5' +
  1177. @end smallexample
  1178. @end group
  1179. X
  1180. @c [fix-ref Date Arithmetic]
  1181. @noindent
  1182. The @kbd{t N} (``now'') command pushes the current date and time on the
  1183. stack; then we add two days, ten hours and five minutes to the date and
  1184. time.  Other date-and-time related commands include @kbd{t J}, which
  1185. does Julian day conversions, @kbd{t W}, which finds the beginning of
  1186. the week in which a date form lies, and @kbd{t I}, which increments a
  1187. date by one or several months.  @xref{Date Arithmetic}, for more.
  1188. X
  1189. (@bullet{}) @strong{Exercise 5.}  How many days until the next
  1190. Friday the 13th?  @xref{Types Answer 5, 5}. (@bullet{})
  1191. X
  1192. (@bullet{}) @strong{Exercise 6.}  How many leap years will there be
  1193. between now and the year 10001 A.D.?  @xref{Types Answer 6, 6}. (@bullet{})
  1194. X
  1195. @cindex Slope and angle of a line
  1196. @cindex Angle and slope of a line
  1197. An @dfn{error form} represents a mean value with an attached standard
  1198. deviation, or error estimate.  Suppose our measurements indicate that
  1199. a certain telephone pole is about 30 meters away, with an estimated
  1200. error of 1 meter, and 8 meters tall, with an estimated error of 0.2
  1201. meters.  What is the slope of a line from here to the top of the
  1202. pole, and what is the equivalent angle in degrees?
  1203. X
  1204. @group
  1205. @smallexample
  1206. 1:  8 +/- 0.2    2:  8 +/- 0.2   1:  0.266 +/- 0.011   1:  14.93 +/- 0.594
  1207. X    .            1:  30 +/- 1        .                     .
  1208. X                     .
  1209. X
  1210. X    8 p .2 RET       30 p 1          /                     I T
  1211. @end smallexample
  1212. @end group
  1213. X
  1214. @noindent
  1215. This means that the angle is about 15 degrees, and, assuming our
  1216. original error estimates were valid standard deviations, there is about
  1217. a 60% chance that the result is correct within 0.59 degrees.
  1218. X
  1219. @cindex Torus, volume of
  1220. (@bullet{}) @strong{Exercise 7.}  The volume of a torus (a donut shape) is
  1221. @c{$2 \pi^2 R r^2$}
  1222. @w{@cite{2 pi^2 R r^2}} where @cite{R} is the radius of the circle that
  1223. defines the center of the tube and @cite{r} is the radius of the tube
  1224. itself.  Suppose @cite{R} is 20 cm and @cite{r} is 4 cm, each known to
  1225. within 5 percent.  What is the volume and the relative uncertainty of
  1226. the volume?  @xref{Types Answer 7, 7}. (@bullet{})
  1227. X
  1228. An @dfn{interval form} represents a range of values.  While an
  1229. error form is best for making statistical estimates, intervals give
  1230. you exact bounds on an answer.  Suppose we additionally know that
  1231. our telephone pole is definitely between 28 and 31 meters away,
  1232. and that it is between 7.7 and 8.1 meters tall.
  1233. X
  1234. @group
  1235. @smallexample
  1236. 1:  [7.7 .. 8.1]  2:  [7.7 .. 8.1]  1:  [0.24 .. 0.28]  1:  [13.9 .. 16.1]
  1237. X    .             1:  [28 .. 31]        .                   .
  1238. X                      .
  1239. X
  1240. X  [ 7.7 .. 8.1 ]    [ 28 .. 31 ]        /                   I T
  1241. @end smallexample
  1242. @end group
  1243. X
  1244. @noindent
  1245. If our bounds were correct, then the angle to the top of the pole
  1246. is sure to lie in the range shown.
  1247. X
  1248. The square brackets around these intervals indicate that the endpoints
  1249. themselves are allowable values.  In other words, the distance to the
  1250. telephone pole is between 28 and 31, @emph{inclusive}.  You can also
  1251. make an interval that is exclusive of its endpoints by writing
  1252. parentheses instead of square brackets.  You can even make an interval
  1253. which is inclusive (``closed'') on one end and exclusive (``open'') on
  1254. the other.
  1255. X
  1256. @group
  1257. @smallexample
  1258. 1:  [1 .. 10)    1:  (0.1 .. 1]   2:  (0.1 .. 1]   1:  (0.2 .. 3)
  1259. X    .                .            1:  [2 .. 3)         .
  1260. X                                      .
  1261. X
  1262. X  [ 1 .. 10 )        &              [ 2 .. 3 )         *
  1263. @end smallexample
  1264. @end group
  1265. X
  1266. @noindent
  1267. The Calculator automatically keeps track of which end values should
  1268. be open and which should be closed.  You can also make infinite or
  1269. semi-infinite intervals by using @samp{-inf} or @samp{inf} for one
  1270. or both endpoints.
  1271. X
  1272. (@bullet{}) @strong{Exercise 8.}  What answer would you expect from
  1273. @samp{@w{1 /} @w{(0 .. 10)}}?  What about @samp{@w{1 /} @w{(-10 .. 0)}}?  What
  1274. about @samp{@w{1 /} @w{[0 .. 10]}} (where the interval actually includes
  1275. zero)?  What about @samp{@w{1 /} @w{(-10 .. 10)}}?
  1276. @xref{Types Answer 8, 8}. (@bullet{})
  1277. X
  1278. (@bullet{}) @strong{Exercise 9.}  Two easy ways of squaring a number
  1279. are @kbd{RET *} and @w{@kbd{2 ^}}.  Normally these produce the same
  1280. answer.  Would you expect this still to hold true for interval forms?
  1281. If not, which of these will result in a larger interval?
  1282. @xref{Types Answer 9, 9}. (@bullet{})
  1283. X
  1284. A @dfn{modulo form} is used for performing arithmetic modulo @i{M}.
  1285. For example, arithmetic involving time is generally done modulo 12
  1286. or 24 hours.
  1287. X
  1288. @group
  1289. @smallexample
  1290. 1:  17 mod 24    1:  3 mod 24     1:  21 mod 24    1:  9 mod 24
  1291. X    .                .                .                .
  1292. X
  1293. X    17 M 24 RET      10 +             n                5 /
  1294. @end smallexample
  1295. @end group
  1296. X
  1297. @noindent
  1298. In this last step, Calc has found a new number which, when multiplied
  1299. by 5 modulo 24, produces the original number, 21.  If @i{M} is prime
  1300. it is always possible to find such a number.  For non-prime @i{M}
  1301. like 24, it is only sometimes possible.
  1302. X
  1303. @group
  1304. @smallexample
  1305. 1:  10 mod 24    1:  16 mod 24    1:  1000000...   1:  16
  1306. X    .                .                .                .
  1307. X
  1308. X    10 M 24 RET      100 ^            10 RET 100 ^     24 %
  1309. @end smallexample
  1310. @end group
  1311. X
  1312. @noindent
  1313. These two calculations get the same answer, but the first one is
  1314. much more efficient because it avoids the huge intermediate value
  1315. that arises in the second one.
  1316. X
  1317. @cindex Fermat, primality test of
  1318. (@bullet{}) @strong{Exercise 10.}  A theorem of Pierre de Fermat
  1319. says that @c{\w{$x^{n-1} \bmod n = 1$}}
  1320. @cite{x^(n-1) mod n = 1} if @cite{n} is a prime number
  1321. and @cite{x} is an integer less than @cite{n}.  If @cite{n} is
  1322. @emph{not} a prime number, this will @emph{not} be true for most
  1323. values of @cite{x}.  Thus we can test informally if a number is
  1324. prime by trying this formula for several values of @cite{x}.
  1325. Use this test to tell whether the following numbers are prime:
  1326. 811749613, 15485863.  @xref{Types Answer 10, 10}. (@bullet{})
  1327. X
  1328. It is possible to use HMS forms as parts of error forms, intervals,
  1329. modulo forms, or as the phase part of a polar complex number.
  1330. For example, the @code{calc-time} command pushes the current time
  1331. of day on the stack as an HMS/modulo form.
  1332. X
  1333. @group
  1334. @smallexample
  1335. 1:  17@@ 34' 45" mod 24@@ 0' 0"     1:  6@@ 22' 15" mod 24@@ 0' 0"
  1336. X    .                                 .
  1337. X
  1338. X    x time RET                        n
  1339. @end smallexample
  1340. @end group
  1341. X
  1342. @noindent
  1343. This calculation tells me it is six hours and 22 minutes until midnight.
  1344. X
  1345. (@bullet{}) @strong{Exercise 11.}  A rule of thumb is that one year
  1346. is about @c{$\pi \times 10^7$}
  1347. @w{@cite{pi * 10^7}} seconds.  What time will it be that
  1348. many seconds from right now?  @xref{Types Answer 11, 11}. (@bullet{})
  1349. X
  1350. (@bullet{}) @strong{Exercise 12.}  You are preparing to order packaging
  1351. for the CD release of the Extended Disco Version of @emph{Abbey Road}.
  1352. You are told that the songs will actually be anywhere from 20 to 60
  1353. seconds longer than the originals.  One CD can hold about 75 minutes
  1354. of music.  Should you order single or double packages?
  1355. @xref{Types Answer 12, 12}. (@bullet{})
  1356. X
  1357. Another kind of data the Calculator can manipulate is numbers with
  1358. @dfn{units}.  This isn't strictly a new data type; it's simply an
  1359. application of algebraic expressions, where we use variables with
  1360. suggestive names like @samp{cm} and @samp{in} to represent units
  1361. like centimeters and inches.
  1362. X
  1363. @group
  1364. @smallexample
  1365. 1:  2 in        1:  5.08 cm      1:  0.027778 fath   1:  0.0508 m
  1366. X    .               .                .                   .
  1367. X
  1368. X    ' 2in RET       u c cm RET       u c fath RET        u b
  1369. @end smallexample
  1370. @end group
  1371. X
  1372. @noindent
  1373. We enter the quantity ``2 inches'' (actually an algebraic expression
  1374. which means two times the variable @samp{in}), then we convert it
  1375. first to centimeters, then to fathoms, then finally to ``base'' units,
  1376. which in this case means meters.
  1377. X
  1378. @group
  1379. @smallexample
  1380. 1:  9 acre     1:  3 sqrt(acre)   1:  190.84 m   1:  190.84 m + 30 cm
  1381. X    .              .                  .              .
  1382. X
  1383. X ' 9 acre RET      Q                  u s            ' $+30 cm RET
  1384. X
  1385. @end smallexample
  1386. @end group
  1387. @noindent
  1388. @group
  1389. @smallexample
  1390. 1:  191.14 m     1:  36536.3046 m^2    1:  365363046 cm^2
  1391. X    .                .                     .
  1392. X
  1393. X    u s              2 ^                   u c cgs
  1394. @end smallexample
  1395. @end group
  1396. X
  1397. @noindent
  1398. Since units expressions are really just formulas, taking the square
  1399. root of @samp{acre} is undefined.  After all, @code{acre} might be an
  1400. algebraic variable that you will someday assign a value.  We use the
  1401. ``units-simplify'' command to simplify the expression with variables
  1402. being interpreted as unit names.
  1403. X
  1404. In the final step, we have converted not to a particular unit, but to a
  1405. units system.  The ``cgs'' system uses centimeters instead of meters
  1406. as its standard unit of length.
  1407. X
  1408. There are a wide variety of units defined in the Calculator.
  1409. X
  1410. @group
  1411. @smallexample
  1412. 1:  55 mph     1:  88.5139 kph   1:   88.5139 km / hr   1:  8.201407e-8 c
  1413. X    .              .                  .                     .
  1414. X
  1415. X ' 55 mph RET      u c kph RET        u c km/hr RET         u c c RET
  1416. @end smallexample
  1417. @end group
  1418. X
  1419. @noindent
  1420. We express a speed first in miles per hour, then in kilometers per
  1421. hour, then again using a slightly more explicit notation, then
  1422. finally in terms of fractions of the speed of light.
  1423. X
  1424. Temperature conversions are a bit more tricky.  There are two ways to
  1425. interpret ``20 degrees Fahrenheit''---it could mean an actual
  1426. temperature, or it could mean a change in temperature.  For normal
  1427. units there is no difference, but temperature units have an offset
  1428. as well as a scale factor and so there must be two explicit commands
  1429. for them.
  1430. X
  1431. @group
  1432. @smallexample
  1433. 1:  20 degF       1:  11.1111 degC     1:  -20:3 degC    1:  -6.666 degC
  1434. X    .                 .                    .                 .
  1435. X
  1436. X  ' 20 degF RET       u c degC RET         U u t degC RET    c f
  1437. @end smallexample
  1438. @end group
  1439. X
  1440. @noindent
  1441. First we convert a change of 20 degrees Fahrenheit into an equivalent
  1442. change in degrees Celsius (or Centigrade).  Then, we convert the
  1443. absolute temperature 20 degrees Fahrenheit into Celsius.  Since
  1444. this comes out as an exact fraction, we then convert to floating-point
  1445. for easier comparison with the other result.
  1446. X
  1447. For simple unit conversions, you can put a plain number on the stack.
  1448. Then @kbd{u c} and @kbd{u t} will prompt for both old and new units.
  1449. When you use this method, you're responsible for remembering which
  1450. numbers are in which units:
  1451. X
  1452. @group
  1453. @smallexample
  1454. 1:  55         1:  88.5139              1:  8.201407e-8
  1455. X    .              .                        .
  1456. X
  1457. X    55             u c mph RET kph RET      u c km/hr RET c RET
  1458. @end smallexample
  1459. @end group
  1460. X
  1461. To see a complete list of built-in units, type @kbd{u v}.  Press
  1462. @w{@kbd{M-# c}} again to re-enter the Calculator when you're done looking
  1463. at the units table.
  1464. X
  1465. (@bullet{}) @strong{Exercise 13.}  How many seconds are there really
  1466. in a year?  @xref{Types Answer 13, 13}. (@bullet{})
  1467. X
  1468. @cindex Speed of light
  1469. (@bullet{}) @strong{Exercise 14.}  Supercomputer designs are limited by
  1470. the speed of light (and of electricity, which is nearly as fast).
  1471. Suppose a computer has a 4.1 ns (nanosecond) clock cycle, and its
  1472. cabinet is one meter across.  Is speed of light going to be a
  1473. significant factor in its design?  @xref{Types Answer 14, 14}. (@bullet{})
  1474. X
  1475. (@bullet{}) @strong{Exercise 15.}  Sam the Slug normally travels about
  1476. five yards in an hour.  He has obtained a supply of Power Pills; each
  1477. Power Pill he eats doubles his speed.  How many Power Pills can he
  1478. swallow and still travel legally on most US highways?
  1479. @xref{Types Answer 15, 15}. (@bullet{})
  1480. X
  1481. @node Algebra Tutorial, Programming Tutorial, Types Tutorial, Tutorial
  1482. @section Algebra and Calculus Tutorial
  1483. X
  1484. @noindent
  1485. This section shows how to use Calc's algebra facilities to solve
  1486. equations, do simple calculus problems, and manipulate algebraic
  1487. formulas.
  1488. X
  1489. @menu
  1490. * Basic Algebra Tutorial::
  1491. * Rewrites Tutorial::
  1492. @end menu
  1493. X
  1494. @node Basic Algebra Tutorial, Rewrites Tutorial, Algebra Tutorial, Algebra Tutorial
  1495. @subsection Basic Algebra
  1496. X
  1497. @noindent
  1498. If you enter a formula in algebraic mode that refers to variables,
  1499. the formula itself is pushed onto the stack.  You can manipulate
  1500. formulas as regular data objects.
  1501. X
  1502. @group
  1503. @smallexample
  1504. 1:  2 x^2 - 6       1:  6 - 2 x^2       1:  (6 - 2 x^2) (3 x^2 + y)
  1505. X    .                   .                   .
  1506. X
  1507. X    ' 2x^2-6 RET        n                   ' 3x^2+y RET *
  1508. @end smallexample
  1509. @end group
  1510. X
  1511. (@bullet{}) @strong{Exercise 1.}  Do @kbd{' x RET Q 2 ^} and
  1512. @kbd{' x RET 2 ^ Q} both wind up with the same result (@samp{x})?
  1513. Why or why not?  @xref{Algebra Answer 1, 1}. (@bullet{})
  1514. X
  1515. There are also commands for doing common algebraic operations on
  1516. formulas.  Continuing with the formula from the last example,
  1517. X
  1518. @group
  1519. @smallexample
  1520. 1:  18 x^2 + 6 y - 6 x^4 - 2 x^2 y    1:  (18 - 2 y) x^2 - 6 x^4 + 6 y
  1521. X    .                                     .
  1522. X
  1523. X    a x                                   a c x RET
  1524. @end smallexample
  1525. @end group
  1526. X
  1527. @noindent
  1528. First we ``expand'' using the distributive law, then we ``collect''
  1529. terms involving like powers of @cite{x}.
  1530. X
  1531. Let's find the value of this expression when @cite{x} is 2 and @cite{y}
  1532. is one-half.
  1533. X
  1534. @group
  1535. @smallexample
  1536. 1:  17 x^2 - 6 x^4 + 3      1:  -25
  1537. X    .                           .
  1538. X
  1539. X    1:2 s l y RET               2 s l x RET
  1540. @end smallexample
  1541. @end group
  1542. X
  1543. @noindent
  1544. The @kbd{s l} command means ``let''; it takes a number from the top of
  1545. the stack and temporarily assigns it as the value of the variable
  1546. you specify.  It then evaluates (as if by the @kbd{=} key) the
  1547. next expression on the stack.  After this command, the variable goes
  1548. back to its original value, if any.
  1549. X
  1550. (An earlier exercise in this tutorial involved storing a value in the
  1551. variable @code{x}; if this value is still there, you will have to
  1552. unstore it with @kbd{s u x RET} before the above example will work
  1553. properly.)
  1554. X
  1555. @cindex Maximum of a function using Calculus
  1556. Let's find the maximum value of our original expression when @cite{y}
  1557. is one-half and @cite{x} ranges over all possible values.  We can
  1558. do this by taking the derivative with respect to @cite{x} and examining
  1559. values of @cite{x} for which the derivative is zero.  If the second
  1560. derivative of the function at that value of @cite{x} is negative,
  1561. the function has a local maximum there.
  1562. X
  1563. @group
  1564. @smallexample
  1565. 1:  17 x^2 - 6 x^4 + 3      1:  34 x - 24 x^3
  1566. X    .                           .
  1567. X
  1568. X    U DEL  s 1                  a d x RET   s 2
  1569. @end smallexample
  1570. @end group
  1571. X
  1572. @noindent
  1573. Well, the derivative is clearly zero when @cite{x} is zero.  To find
  1574. the other root(s), let's divide through by @cite{x} and then solve:
  1575. X
  1576. @group
  1577. @smallexample
  1578. 1:  (34 x - 24 x^3) / x    1:  34 x / x - 24 x^3 / x    1:  34 - 24 x^2
  1579. X    .                          .                            .
  1580. X
  1581. X    ' x RET /                  a x                          a s
  1582. X
  1583. @end smallexample
  1584. @end group
  1585. @noindent
  1586. @group
  1587. @smallexample
  1588. 1:  34 - 24 x^2 = 0        1:  x = 1.19023
  1589. X    .                          .
  1590. X
  1591. X    0 a =  s 3                 a S x RET
  1592. @end smallexample
  1593. @end group
  1594. X
  1595. @noindent
  1596. Notice the use of @kbd{a s} to ``simplify'' the formula.  When the
  1597. default algebraic simplifications don't do enough, you can use
  1598. @kbd{a s} to tell Calc to spend more time on the job.
  1599. X
  1600. Now we compute the second derivative and plug in our values of @cite{x}:
  1601. X
  1602. @group
  1603. @smallexample
  1604. 1:  1.19023        2:  1.19023         2:  1.19023
  1605. X    .              1:  34 x - 24 x^3   1:  34 - 72 x^2
  1606. X                       .                   .
  1607. X
  1608. X    a .                r 2                 a d x RET s 4
  1609. @end smallexample
  1610. @end group
  1611. X
  1612. @noindent
  1613. (The @kbd{a .} command extracts just the righthand side of an equation.
  1614. Another method would have been to use @kbd{v u} to unpack the equation
  1615. @w{@samp{x = 1.19}} to @samp{x} and @samp{1.19}, then use @kbd{M-- M-2 DEL}
  1616. to delete the @samp{x}.)
  1617. X
  1618. @group
  1619. @smallexample
  1620. 2:  34 - 72 x^2   1:  -68.         2:  34 - 72 x^2     1:  34
  1621. 1:  1.19023           .            1:  0                   .
  1622. X    .                                  .
  1623. X
  1624. X    TAB               s l x RET        U DEL 0             s l x RET
  1625. @end smallexample
  1626. @end group
  1627. X
  1628. @noindent
  1629. The first of these second derivatives is negative, so we know the function
  1630. SHAR_EOF
  1631. true || echo 'restore of calc.texinfo failed'
  1632. fi
  1633. echo 'End of  part 33'
  1634. echo 'File calc.texinfo is continued in part 34'
  1635. echo 34 > _shar_seq_.tmp
  1636. exit 0
  1637. exit 0 # Just in case...
  1638. -- 
  1639. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1640. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1641. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1642. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1643.